﻿/*                       NOTICE
 * 
 * This software was produced for the U. S. Government
 * under Contract No. FA8721-10-C-0001, and is
 * subject to the Rights in Noncommercial Computer Software
 * and Noncommercial Computer Software Documentation Clause
 * (DFARS) 252.227-7014 (JUN 1995)
 * 
 * Approved for Public Release: 11-2435
 * © 2011 The MITRE Corporation. All Rights Reserved. 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace GestureListenerClient.Gestures
{
    public abstract class Gesture
    {
        /// <summary>
        /// Create an instance of this gesture
        /// </summary>
        /// <param name="time">Time this gesture occurred</param>
        /// <param name="coords">List of coordinates associated with this gesture</param>
        public Gesture(int id, DateTime time, PointF[] coords) : this(id, -1, null, time, coords) { }

        /// <summary>
        /// Create an instance of this gesture
        /// </summary>
        /// <param name="prevGesture">Previous gesture associated with this current gesture</param>
        /// <param name="time">Time this gesture occurred</param>
        /// <param name="coords">List of coordinates associated with this gesture</param>
        public Gesture(int id, Gesture prevGesture, DateTime time, PointF[] coords) : this(id, -1, prevGesture, time, coords) { }

        /// <summary>
        /// Create an instance of this gesture
        /// </summary>
        /// <param name="index">Index on the screen of this gesture (for overlapping gestures).</param>
        /// <param name="time">Time this gesture occurred</param>
        /// <param name="coords">List of coordinates associated with this gesture</param>
        public Gesture(int id, int index, DateTime time, PointF[] coords) : this(id, index, null, time, coords) { }

        /// <summary>
        /// Create an instance of this gesture
        /// </summary>
        /// <param name="index">Index on the screen of this gesture (for overlapping gestures).</param>
        /// <param name="prevGesture">Previous gesture associated with this current gesture</param>
        /// <param name="time">Time this gesture occurred</param>
        /// <param name="coords">List of coordinates associated with this gesture</param>
        public Gesture(int id, int index, Gesture prevGesture, DateTime time, PointF[] coords)
        {
            this.ID = id;
            this.Index = index;
            this.PreviousGesture = prevGesture;
            this.GestureTime = time;
            this.Coords = coords;
        }

        public int ID { get; set; }

        /// <summary>
        /// Get the index of this gesture on the display
        /// </summary>
        public int Index { get; set; }

        /// <summary>
        /// Get the time this gesture event occurred
        /// </summary>
        public DateTime GestureTime { get; set; }

        public PointF Center { get; set; }

        /// <summary>
        /// Get the locations this gesture occurred
        /// </summary>
        public PointF[] Coords { get; set; }

        /// <summary>
        /// Get the reference to the previous gesture associated with this current gesture (i.e. the starting gesture)
        /// </summary>
        public Gesture PreviousGesture { get; set; }
    }
}
